package com.heima.user.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.user.dtos.LoginDto;
import com.heima.model.user.pojo.ApUser;
import com.heima.user.mapper.ApUserMapper;
import com.heima.user.service.ApUserService;
import com.heima.utils.common.AppJwtUtil;
import com.heima.utils.common.MD5Utils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class ApApUserServiceImpl implements ApUserService {
    @Autowired
    private ApUserMapper apUserMapper;

    @Override
    public ResponseResult login(LoginDto dto) {
        String phone = dto.getPhone();
        String password = dto.getPassword();
//        判断用户是否输入手机号和密码
        if (StringUtils.isNotBlank(password)&&StringUtils.isNotBlank(password)) {
//            有值就是账户登录，查询数据库
            ApUser apUser = apUserMapper.selectOne(Wrappers.lambdaQuery(ApUser.class).eq(ApUser::getPhone, phone));
//           判断用户是否存在
            if (apUser==null){
//                用户不存在
                return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR,"用户名不存在");
            }
            String encode = MD5Utils.encode(password + apUser.getSalt());
//            判断密码是否正确
            if (!apUser.getPassword().equals(encode)){
//            密码错误
                return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
            }

//            生成token并返回数据
            Map map = new HashMap<>();
            map.put("token",AppJwtUtil.getToken(apUser.getId().longValue()));
            apUser.setSalt("");
            apUser.setPassword("");
            map.put("user",apUser);

            return ResponseResult.okResult(map);
        }
//        没有输入就是游客登录
        Map map = new HashMap<>();
        map.put("token",AppJwtUtil.getToken(0L));
        return null;
    }

    public static void main(String[] args) {
        String encode = MD5Utils.encode("123456" + "123abc");
        System.out.println(encode);
    }
}
